#include<bits/stdc++.h>
using namespace std;
inline long long read(){
	long long ret=0,neg=1;
	char ch;
	ch=(char)getchar();
	while((ch<'0'||ch>'9')&&ch!='-') ch=(char)getchar();
	if(ch=='-'){
		neg=-1;
		ch=(char)getchar();
	}
	while(ch>='0'&&ch<='9'){
		ret=(ret<<1)+(ret<<3)+(ch^48);
		ch=(char)getchar();
	}
	return ret*neg;
}
void write(long long x){
	if(x<0) putchar('-'),x=-x;
	if(x>=10) write(x/10);
	putchar('0'+x%10);
}

// const long long mod=998244353;

// inline long long ksm(long long x,long long t){
// 	long long ret=1;
// 	while(t){
// 		if(t&1){
// 			ret=ret*x%mod;
// 		}
// 		x=x*x%mod;
// 		t>>=1;
// 	}
// 	return ret;
// }

struct Primagen{
	long double k,b;
};

Primagen operator + (Primagen x,Primagen y){
	return (Primagen){(x.k+y.k),(x.b+y.b)};
}
Primagen operator * (Primagen x,long double y){
	return (Primagen){x.k*y,x.b*y};
}
long double Calc(Primagen x,long double y){
	return (y*x.k+x.b);
}

long long n,a0,A,B,C,M;
int buc[10000010];
int idx,arr[10000010];

bool check(long double lim){
	long double R_,L;
	if(arr[1]==1){
		R_=1;
		L=lim+lim-R_;
		if(L<0) L=0;
		if(L>1) return false;
	}
	else{
		R_=1-lim;
		L=lim+lim-R_;
		if(L<0) L=0;
		if(L>1) return false;
	}
	for(int i=2;i<=idx;++i){
		if(arr[i]==1){
			long double R;
			R=1.0-L;
			long double L_;
			L_=lim+lim-R;
			R_=R;
			L=L_;
			if(L<0) L=0;
			if(L>1&&i<idx) return false;
		}
		else{
			long double M;
			M=lim;
			long double R;
			R=1.0-M-L;
			if(R<0) return false;
			long double L_;
			L_=lim+lim-R;
			R_=R;
			L=L_;
			if(L<0) L=0;
			if(L>1&&i<idx) return false;
		}
	}
	return true;
}
void Proto(long double lim){
	long double R_,L;
	if(arr[1]==1){
		R_=1;
		L=lim+lim-R_;
		if(L<0) L=0;
		// if(L>1) return false;
		cout<<"0 0 "<<R_<<endl;
	}
	else{
		R_=1-lim;
		L=lim+lim-R_;
		if(L<0) L=0;
		// if(L>1) return false;
		cout<<"0 "<<lim<<' '<<R_<<endl;
	}
	for(int i=2;i<=idx;++i){
		cout<<"!! "<<0.5*(R_+L)<<endl;
		cout<<L<<' ';
		if(arr[i]==1){
			long double R;
			R=1.0-L;
			long double L_;
			L_=lim+lim-R;
			R_=R;
			L=L_;
			if(L<0) L=0;
			// if(L>1&&i<idx) return false;
			cout<<"0 "<<R_<<endl;
		}
		else{
			long double M;
			M=lim;
			cout<<M<<' ';
			long double R;
			R=1.0-M-L;
			cout<<R<<'\n';
			// if(R<0) return false;
			long double L_;
			L_=lim+lim-R;
			R_=R;
			L=L_;
			if(L<0) L=0;
			// if(L>1&&i<idx) return false;
		}
	}
	// return true;
}

int main(){
	freopen("guess.in","r",stdin);
	freopen("guess.out","w",stdout);
	int TTT=read();
	while(TTT--){
		n=read();
		a0=read();
		A=read();
		B=read();
		C=read();
		M=read();
		memset(buc,0,(M+3)<<2);
		memset(arr,0,(M+3)<<2);
		idx=0;
		for(int i=1;i<=n;++i){
			a0=(A*a0%M*a0+B*a0+C)%M;
			++a0;
			++buc[a0];
		}
		for(int i=1;i<=M;++i){
			if(buc[i]){
				if(buc[i]==1){
					arr[++idx]=1;
					// cout<<"1 ";
				}
				else{
					arr[++idx]=2;
					// cout<<"2 ";
				}
			}
		}
		if(idx==1){
			puts("1 1");
			continue;
		}
		long double l=0,r=1,mid;
		while(l+0.000001<r){
			mid=(l+r)/2.0;
			if(check(mid)) l=mid;
			else r=mid;
		}
		// Proto(l);
		printf("%.6Lf 0\n",l);
		// Primagen R_,L;
		// if(arr[1]==1){
		// 	R_=(Primagen){0,1};
		// 	L=(Primagen){1,0};
		// }
		// else{
		// 	R_=(Primagen){-1,1};
		// 	L=(Primagen){3,-1};
		// }
		// for(int i=2;i<=idx;++i){
		// 	if(arr[i]==1){
		// 		Primagen R;
		// 		R=L*(-1);
		// 		R=R+(Primagen){0,1};
		// 		Primagen L_;
		// 		L_=R_+L+(R*(-1));
		// 		R_=R;
		// 		L=L_;
		// 	}
		// 	else{
		// 		Primagen M;
		// 		M=(R_+L)*0.5;
		// 		Primagen R;
		// 		R=(Primagen){0,1}+((L+M)*(-1));
		// 		Primagen L_;
		// 		L_=R_+L+(R*(-1));
		// 		R_=R;
		// 		L=L_;
		// 	}
		// }
		// assert(R_.k!=0);
		// long double x=-R_.b/R_.k;
		// x=x*ksm(R_.k,mod-2)%mod;



		// if(arr[1]==1){
		// 	R_=(Primagen){0,1};
		// 	L=(Primagen){1,0};
		// }
		// else{
		// 	R_=(Primagen){-1,1};
		// 	L=(Primagen){3,-1};
		// }
		// cout<<Calc((R_+L)*0.5,x);
		// // write(0);
		// putchar(' ');
		// // write(Calc((R_+L)*0.5,x));
		// putchar('\n');
		// for(int i=2;i<=idx;++i){
		// 	cout<<Calc(R_,x)<<'\n';
		// 	if(arr[i]==1){
		// 		Primagen R;
		// 		R=L*(-1);
		// 		R=R+(Primagen){0,1};
		// 		Primagen L_;
		// 		L_=R_+L+(R*(-1));
		// 		R_=R;
		// 		L=L_;
		// 	}
		// 	else{
		// 		Primagen M;
		// 		M=(R_+L)*0.5;
		// 		Primagen R;
		// 		R=(Primagen){0,1}+((L+M)*(-1));
		// 		Primagen L_;
		// 		L_=R_+L+(R*(-1));
		// 		R_=R;
		// 		L=L_;
		// 	}
		// }
	}
	return 0;
}